package com.stm.bi.annotation;

import com.stm.framework.annotation.ReqParam;
import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.PARAMETER;

/**
 * 查询参数注解说明
 *
 * @author chenyingjun
 */
@Target({FIELD, PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@ReqParam(label = "")
public @interface QueryCriteria {
    /**
     * 等于配操作，当值为数据或者列表时，自动转为in
     */
    public final static String OP_EQ = "=";
    /**
     * 小于操作
     */
    public final static String OP_LT = "<";
    /**
     * 小于等于操作
     */
    public final static String OP_LE = "<=";

    /**
     * 大于操作
     */
    public final static String OP_GT = ">";
    /**
     * 大于等于操作
     */
    public final static String OP_GE = ">=";
    /**
     * 不等于操作
     */
    public final static String OP_NE = "!=";
    /**
     * 中间匹配操作
     */
    public final static String OP_LIKE = "like";
    /**
     * 左匹配操作
     */
    public final static String OP_LEFT_MATCH = "left_match";
    /**
     * 右匹配操作
     */
    public final static String OP_RIGHT_MATCH = "right_match";

    /**
     * 模糊匹配
     * 比如 输入"你渣"能匹配上"你真他妈的是渣男！"
     */
    public final static String OP_FUZZY_MATCH = "fuzzy_match";

    public final static String OP_IN = "in";
    public final static String OP_NOT_IN = "not in";

    @AliasFor(annotation = ReqParam.class)
    String label();//参数名

    @AliasFor(annotation = ReqParam.class)
    String requiredGroup() default "";//多个参数名必需要其中一个不为空的一个组

    @AliasFor(annotation = ReqParam.class)
    boolean required() default false;//必需录入

    @AliasFor(annotation = ReqParam.class)
    int maxLength() default 0;//参数名大长度，缺省为255

    @AliasFor(annotation = ReqParam.class)
    String validateExp() default "";//校验类型

    @AliasFor(annotation = ReqParam.class)
    String example() default "";//样例

    @AliasFor(annotation = ReqParam.class)
    String testData() default "";//测试数据，支持动态表达

    @AliasFor(annotation = ReqParam.class)
    String note() default "";//参数说明
    @AliasFor(annotation = ReqParam.class)
    Class enumClass() default Object.class;


    String operation() default "=";//操作

    String column() default "";// String column() default "";// String column() default "";//
}
